Sistema de Nombrado en Java (JNDI) [Parte I]

Este ejemplo muestra c�mo escribir un programa que recupera atributos desde un objeto directorio. Usa un proveedor de servidos LDAP para acceder a servicios LDAP.

.�Importar las clases JNDI Directory

Usando nuestro editor de texto favorito, creamos un fichero llamado Getattr.java.

Podemos importar el paquete completo o s�lo las clases e interfacesindividuales que vamos a utilizar. El siguiente c�digo importa las clases usadas de los paquetes javax.naming y javax.naming.directory.

import javax.naming.Context;
import javax.naming.directory.InitialDirContext;
import javax.naming.directory.DirContext;
import javax.naming.directory.Attributes;
import javax.naming.NamingException;

.�Crear le Contexto de Directorio Inicial

En el m�todo main() del programa, creamos el contexto de directorio inicial. Esto es similar a la creacci�n del contexto inicial en el anterior ejemplo naming, excepto en que usamos el constructor para InitialDirContext.

Hashtable env = new Hashtable();
env.put(Context.INITIAL_CONTEXT_FACTORY,
    "com.sun.jndi.ldap.LdapCtxFactory");
env.put(Context.PROVIDER_URL, "ldap://localhost:389/o=JNDITutorial");

DirContext ctx = new InitialDirContext(env);

Indicamos que est�mos usando el proveedor de sericios LDAP seleccionando el par�metro Hashtable del constructor apropiado de InitialDirContext .

Por ahora, lo �nico a entender es que el programa por defecto identifica al serveridor LDAP en la m�quina local. Si nuestro sevidor LDAP est� en otra m�quina o est� usando otro puerto, tendremos que editar adecuadamente la URL de LDAP ("ldap://localhost:389/o=JNDITutorial").

Las instrucciones para configurar el servidor LDAP de ejemplo para este tutorial se dan en la secci�n Preparaciones.

.�Obtener Atributos de un Objeto Directorio

Luego, usamos getAttributes() para obtener los atributos de un objeto. El siguiente c�digo recupera todos los atributos asociados con el objeto unido al nombre "cn=Ted Geisel, ou=People".

Attributes attrs = ctx.getAttributes("cn = Ted Geisel, ou=People");

.�Extraer el Atributo Deseado

Desde un conjunto de atributos, Attributes, podemos solicitar un atributo particular usando Attributes.get() y luego obtener el valor de ese atriuto. La siguiente l�nea primero obtiene el atributo surname "sn" y luego llama a Attribute.get() para obtener sy valor.

attrs.get("sn").get();

.�Capturar NamingException

Las llamadas a m�todos mostradas hasta ahora pueden lanzar una NamingException.

Por esta raz�n, necesitamos envolver estas llamadas dentro de bloques try/catch.

Aqu� est� el fragmento de c�digo repetido con la clausula try/catch.

try {

    // Create the initial directory context
    DirContext ctx = new InitialDirContext(env);
	    
    // Ask for all attributes of the object 
    Attributes attrs = ctx.getAttributes("cn=Ted Geisel, ou=People");

    // Find the surname attribute ("sn") and print it
    System.out.println("sn: " + attrs.get("sn").get());

} catch (NamingException e) {
    System.err.println("Problem getting attribute:" + e);
}

.�Compilar el Programa

Luego, compilamos el fichero fuente usando el compilador Java. Como con el ejemplo anterior, para hacer esto necesitamos acceso a las clases JNDI.

Si la compilaci�n tiene �xito, el compilador crear� un fichero llamado Getattr.class en el mismo directorio (o carpeta) que el fichero fuente (Getattr.java).

Si la compilaci�n falla, debemos asegurarnos de haber tecleado correctamente el nombre del fichero fuente, usando las ma�usculas apropidas. Si todav�a tenemos problemas podemos vistar la lecci�n Problemas comunes en busca de ayuda.

.�Ejecutar el Programa

Como con el ejemplo anterior, necesitamos acceder a las clases JNDI, y a la clase de nuestro ejemplo� Getattr.class. Tambi�n necesitamos acceder a las clases del proveedor de servicios LDAP (ldap.jar y providerutil.jar). Si est�mos usando Java 2 SDK, v1.3, estas clases ya estar�n incluidas.

Aqu� tenemos un ejemplo de una l�nea de comandos para ejecutar Getattr y la salida que genera.

# java Getattr 
sn: Geisel

Recuerda que el programa fue configurado con la siguiente propiedad:

env.put(Context.PROVIDER_URL, "ldap://localhost:389/o=JNDITutorial");

Con esta configuraci�n, este comando consulta al servidor LDAP en la m�quina localhost que est� escuchando en el puerto 389, siriviendo el espacio de nombres "o=JNDITutorial".

(Puedes ver la secci�n Preparaciones para m�s detalles sobre este paso de configuraci�n). Le pide los atributos de la entrada cn=Ted Geisel, ou=People . Una vez que tiene los atributos, extrae el atributo surname ("sn").

Si tienes problemas al ejecutar este ejemplo, puedes visitar la lecci�n Problemas Comunes.

COMPARTE ESTE ARTÍCULO

COMPARTIR EN FACEBOOK
COMPARTIR EN TWITTER
COMPARTIR EN LINKEDIN
COMPARTIR EN WHATSAPP
SIGUIENTE ARTÍCULO